/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sistemaacademico;

import java.io.Serializable;

/**
 *
 * @author thiagoj
 */
public class Data implements Serializable{
	private int dia;
	
	private int mes;
	
	private int ano;

	public Data() {
		this.dia = 1;
		this.mes = 1;
		this.ano = 1901;
	}

	public Data(int dia, int mes, int ano) {
		if (dia <= 31 && dia > 0){
			this.dia = dia;
		}else{
			this.dia = 1;
		}
		if (mes <= 12 && mes > 0){
			this.mes = mes;
		}else{
			this.mes = 12;
		}
		
		if (ano > 0) {
			this.ano = ano;
		}else{
			this.ano = 1901;
		}
		
		
	}

	public int getDia() {
		return dia;
	}

	public void setDia(int dia) {
		if (dia <= 31 && dia > 0){
			this.dia = dia;
		}else{
			this.dia = 1;
		}
		
	}

	public int getMes() {
		return mes;
	}

	public void setMes(int mes) {
		if (mes > 0 && mes <= 12){
			this.mes = mes;
		}else{
			this.mes = 12;
		}
		
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		if (ano > 0) {
			this.ano = ano;
		}else{
			this.ano = 1901;
		}
		
	}
	
	
	private String formataAno(){
		
		if (this.ano < 10) {
			return "200" + this.ano;
		}else if (this.ano < 100) {
			return "20" + this.ano;
		}else{
			return "" + this.ano;
		}
	}
	
	/**
	 * Converte numero inteiro em extenso
	 * @param numero
	 * @return 
	 */
	private String converteNumero(int numero){
		
		switch (numero){
			case -1:
				return "primeiro";
			case 0: 
				return "";
			case 1:
				return "um";
			case 2:
				return "dois";
			case 3:
				return "tr√™s";
			case 4:
				return "quatro";
			case 5:
				return "cinco";
			case 6:
				return "seis";
			case 7:
				return "sete";
			case 8:
				return "oito";
			case 9:
				return "nove";
			case 10:
				return "dez";
			case 11:
				return "onze";
			case 12:
				return "doze";
			case 13:
				return "treze";
			case 14:
				return "quatorze";
			case 15:
				return "quize";
			case 16:
				return "dezeseis";
			case 17:
				return "dezesete";
			case 18:
				return "dezoito";
			case 19:
				return "dezenove";
			case 20:
				return "vinte";
			case 30: 
				return "trinta";
				
		}
		
		return null;
	}
	
	/**
	 * Converte o dia em extenso
	 * @param vDia
	 * @return 
	 */
	private String converteDia(int vDia){
		String sDia;
		int dezena;
		int unidade;
		
		if (vDia == 1){ //Mudar dia um para primeiro;
			vDia = -1;
		}
		
		if (vDia < 20) {
			sDia = this.converteNumero(vDia);
		}else{
			dezena = (vDia / 10) * 10;
			unidade = (vDia % 10);
			sDia = this.converteNumero(dezena) + " e " + this.converteNumero(unidade);
		}
				
		return sDia;
	}
	
	/**
	 * Converte o mes em extenso
	 * @param vMes
	 * @return 
	 */
	private String converteMes(int vMes){
		switch (vMes){
			case 1:
				return "Janeiro";
			case 2:
				return "Fevereiro";
			case 3:
				return "Mar√ßo";
			case 4:
				return "Abril";
			case 5:
				return "Maior";
			case 6:
				return "Junho";
			case 7:
				return "Julho";
			case 8:
				return "Agorsto";
			case 9:
				return "Setembro";
			case 10:
				return "Outrubro";
			case 11:
				return "Novembro";
			case 12:
				return "Dezembro";
		}
		
		
		return null;
	}
	
	/**
	 * Imprime a data completa
	 * @return 
	 */
	public String imprimir(){
		String vDia;
		String vMes;
		String vAno;
		if (this.dia < 10){
			vDia = "0" + this.dia; 
		}else{
			vDia = "" + this.dia;
		}
		
		if (this.mes < 10) {
			vMes = "0" + this.mes;
		}else{
			vMes = "" + this.mes;
		}
		
		
		
		
		return vDia + "/" + vMes + "/" + this.formataAno();
		
	}
	
	public String imprimirPorExtenso(){
		return "Dia " + this.converteDia(this.dia) + " de " + this.converteMes(this.mes) + " de " + this.formataAno();
	}
	
	
}
